home *** CD-ROM | disk | FTP | other *** search
- I am having problems getting up to speed with Windows Sockets. For
- starters I am trying to send a packet from one place to another. The
- recv() and recvfrom() functions seem to wait infinitely. The send() and
- sendto() function always returns with WSAEINVAL.
-
- swelch@nmsu.edu
-
- --- cut ----
-
-
- //GetProfileString()
-
- #include <windows.h>
- #define _INC_WINDOWS
- #include <winsock.h>
-
- WSADATA wsaData;
-
- void SocketError ( char *,int );
- long FAR PASCAL _export WndProc (HWND, UINT, UINT, LONG) ;
- unsigned char OpenWinsock ( void );
- unsigned char BodyWinsock ( void );
- void CloseWinsock ( void );
- char appname[40];
-
- int PASCAL WinMain(HANDLE hInstance,HANDLE hPrevInstance,LPSTR lpszCmdLine,
- int nCmdShow)
- {
- static char szAppName[]="sock";
- HWND hwnd;
- MSG msg;
- WNDCLASS wndclass;
-
- if(OpenWinsock()) return(0);
-
- if(!hPrevInstance)
- {
- wndclass.style =CS_HREDRAW|CS_VREDRAW;
- wndclass.lpfnWndProc =WndProc;
- wndclass.cbClsExtra =0;
- wndclass.cbWndExtra =0;
- wndclass.hInstance =hInstance;
- wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
- wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
- wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);
- wndclass.lpszMenuName =NULL;
- wndclass.lpszClassName=szAppName;
- RegisterClass (&wndclass) ;
- }
- hwnd=CreateWindow (szAppName,appname,WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT,CW_USEDEFAULT,250,280,NULL,NULL,hInstance,NULL);
-
- ShowWindow(hwnd,nCmdShow);
- UpdateWindow(hwnd);
-
- while(GetMessage(&msg,NULL,0,0))
- {
- TranslateMessage(&msg);
- DispatchMessage (&msg);
- }
-
- CloseWinsock();
-
- return(msg.wParam);
- }
-
- long FAR PASCAL _export WndProc(HWND hwnd,UINT message,UINT wParam,LONG lParam)
- {
- static HWND hwndButton[64];
- char sa[8];
- int i;
-
- switch(message)
- {
- case WM_CREATE:
- /*
- for(i=0;i<64;i++)
- {
- wsprintf(sa,"%02u",i);
- hwndButton[i]=CreateWindow("button",sa,
- WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,(i&7)*30,(i>>3)*30,30,30,
- hwnd,i,((LPCREATESTRUCT)lParam)->hInstance,NULL);
- }
- */
- PostMessage(hwnd,WM_COMMAND,0,0);
- return(0);
-
- case WM_SIZE:
- break;
-
- case WM_PAINT:
- break;
-
- case WM_COMMAND:
- BodyWinsock();
- PostQuitMessage(0);
-
-
- /*
- switch(wParam)
- {
- }
- as seen in the CreateWindow() above (WM_CREATE) the wParam is 0-63
- */
- return(0);
-
- case WM_DRAWITEM:
- break;
-
- case WM_DESTROY:
- PostQuitMessage(0);
- return(0);
- }
- return DefWindowProc(hwnd,message,wParam,lParam);
- }
-
- unsigned char OpenWinsock ( void )
- {
- unsigned char gstring[80];
- int ia;
- HOSTENT *host;
-
- if(WSAStartup(0x0101,&wsaData))
- {
- MessageBox(NULL,"Could not find a usable WINSOCK.DLL","",MB_OK);
- return(1);
- }
-
- if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
- {
- MessageBox(NULL,"Could not find a usable WINSOCK.DLL","",MB_OK);
- WSACleanup();
- return(1);
- }
- wsaData.wVersion=0x0101;
- wsaData.wHighVersion=0x0101;
-
- ia=gethostname(gstring,80);
- if(ia)
- {
- SocketError("gethostname error",WSAGetLastError());
- }
- else
- {
- // MessageBox(NULL,gstring,"gethostname SUCCESS",MB_OK);
- host=gethostbyname(gstring);
- if(host==NULL)
- {
- SocketError("gethostbyname error",WSAGetLastError());
- return(1);
- }
- else
- {
- if(host[0].h_addrtype!=2)
- {
- MessageBox(NULL,"Unknown addres type",appname,MB_OK);
- return(1);
- }
- if(host[0].h_length!=4)
- {
- MessageBox(NULL,"Unknown address length",appname,MB_OK);
- return(1);
- }
- wsprintf(appname,"%s %u.%u.%u.%u S",host[0].h_name,(unsigned char)host[0].h_addr_list[0][0],(unsigned char)host[0].h_addr_list[0][1],(unsigned char)host[0].h_addr_list[0][2],(unsigned char)host[0].h_addr_list[0][3]);
- // MessageBox(NULL,appname,"gethostbyname SUCCESS",MB_OK);
- }
- }
-
- return(0);
- }
-
- unsigned char BodyWinsock ( void )
- {
- unsigned char gstring[80];
- SOCKET sock;
- int ia;
- SOCKADDR_IN sin;
- SOCKADDR s;
-
- sock=socket(PF_INET,SOCK_DGRAM,0);
- if(sock==INVALID_SOCKET)
- {
- SocketError("socket error",WSAGetLastError());
- return(1);
- }
-
- // select() to check status before sending another
- /* ia=sendto(sock,gstring,20,MSG_DONTROUTE,(LPSOCKADDR)&sin,sizeof(sin)); */
-
- wsprintf(gstring,"%s","HELLO THERE");
-
- sin.sin_family=AF_INET;
- sin.sin_addr.s_net =192;
- sin.sin_addr.s_host =9;
- sin.sin_addr.s_lh =200;
- sin.sin_addr.s_impno=6;
-
- s.sa_family=AF_INET;
- s.sa_data[2]=192;
- s.sa_data[3]=9;
- s.sa_data[4]=200;
- s.sa_data[5]=6;
-
- /*
- ia=connect(sock,(LPSOCKADDR)&sin,sizeof(sin));
- if(ia)
- {
- SocketError("connect error",WSAGetLastError());
- }
-
- ia=send(sock,gstring,20,MSG_DONTROUTE);
- */
- /* ia=sendto(sock,gstring,20,0,(LPSOCKADDR)&sin,sizeof(sin));*/
- ia=sendto(sock,gstring,20,MSG_DONTROUTE,&s,sizeof(s));
-
-
- if(ia!=20)
- {
- SocketError("sendto error",WSAGetLastError());
- }
-
- closesocket(sock);
-
- }
-
- void CloseWinsock ( void )
- {
- WSACleanup();
- }
- ----cut----
- ----cut----
-
-
- //GetProfileString()
-
- #include <windows.h>
- #define _INC_WINDOWS
- #include <winsock.h>
-
- WSADATA wsaData;
-
- void SocketError ( char *,int );
- long FAR PASCAL _export WndProc (HWND, UINT, UINT, LONG) ;
- unsigned char OpenWinsock ( void );
- unsigned char BodyWinsock ( void );
- void CloseWinsock ( void );
- char appname[40];
-
- int PASCAL WinMain(HANDLE hInstance,HANDLE hPrevInstance,LPSTR lpszCmdLine,
- int nCmdShow)
- {
- static char szAppName[]="sock";
- HWND hwnd;
- MSG msg;
- WNDCLASS wndclass;
-
- if(OpenWinsock()) return(0);
-
- if(!hPrevInstance)
- {
- wndclass.style =CS_HREDRAW|CS_VREDRAW;
- wndclass.lpfnWndProc =WndProc;
- wndclass.cbClsExtra =0;
- wndclass.cbWndExtra =0;
- wndclass.hInstance =hInstance;
- wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);
- wndclass.hCursor =LoadCursor(NULL,IDC_ARROW);
- wndclass.hbrBackground=GetStockObject(WHITE_BRUSH);
- wndclass.lpszMenuName =NULL;
- wndclass.lpszClassName=szAppName;
- RegisterClass (&wndclass) ;
- }
- hwnd=CreateWindow (szAppName,appname,WS_OVERLAPPEDWINDOW,
- CW_USEDEFAULT,CW_USEDEFAULT,250,280,NULL,NULL,hInstance,NULL);
-
- ShowWindow(hwnd,nCmdShow);
- UpdateWindow(hwnd);
-
- while(GetMessage(&msg,NULL,0,0))
- {
- TranslateMessage(&msg);
- DispatchMessage (&msg);
- }
-
- CloseWinsock();
-
- return(msg.wParam);
- }
-
- long FAR PASCAL _export WndProc(HWND hwnd,UINT message,UINT wParam,LONG lParam)
- {
- static HWND hwndButton[64];
- char sa[8];
- int i;
-
- switch(message)
- {
- case WM_CREATE:
- /*
- for(i=0;i<64;i++)
- {
- wsprintf(sa,"%02u",i);
- hwndButton[i]=CreateWindow("button",sa,
- WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,(i&7)*30,(i>>3)*30,30,30,
- hwnd,i,((LPCREATESTRUCT)lParam)->hInstance,NULL);
- }
- */
- PostMessage(hwnd,WM_COMMAND,0,0);
- return(0);
-
- case WM_SIZE:
- break;
-
- case WM_PAINT:
- break;
-
- case WM_COMMAND:
- BodyWinsock();
- PostQuitMessage(0);
-
-
- /*
- switch(wParam)
- {
- }
- as seen in the CreateWindow() above (WM_CREATE) the wParam is 0-63
- */
- return(0);
-
- case WM_DRAWITEM:
- break;
-
- case WM_DESTROY:
- PostQuitMessage(0);
- return(0);
- }
- return DefWindowProc(hwnd,message,wParam,lParam);
- }
-
- unsigned char OpenWinsock ( void )
- {
- unsigned char gstring[80];
- int ia;
- HOSTENT *host;
-
- if(WSAStartup(0x0101,&wsaData))
- {
- MessageBox(NULL,"Could not find a usable WINSOCK.DLL","",MB_OK);
- return(1);
- }
-
- if(LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
- {
- MessageBox(NULL,"Could not find a usable WINSOCK.DLL","",MB_OK);
- WSACleanup();
- return(1);
- }
- wsaData.wVersion=0x0101;
- wsaData.wHighVersion=0x0101;
-
- ia=gethostname(gstring,80);
- if(ia)
- {
- SocketError("gethostname error",WSAGetLastError());
- }
- else
- {
- host=gethostbyname(gstring);
- if(host==NULL)
- {
- SocketError("gethostbyname error",WSAGetLastError());
- return(1);
- }
- else
- {
- if(host[0].h_addrtype!=2)
- {
- MessageBox(NULL,"Unknown addres type",appname,MB_OK);
- return(1);
- }
- if(host[0].h_length!=4)
- {
- MessageBox(NULL,"Unknown address length",appname,MB_OK);
- return(1);
- }
- wsprintf(appname,"%s %u.%u.%u.%u R",host[0].h_name,(unsigned char)host[0].h_addr_list[0][0],(unsigned char)host[0].h_addr_list[0][1],(unsigned char)host[0].h_addr_list[0][2],(unsigned char)host[0].h_addr_list[0][3]);
- }
- }
- return(0);
- }
-
- unsigned char BodyWinsock ( void )
- {
- unsigned char gstring[80];
- SOCKET sock;
- int ia;
- SOCKADDR s;
- int ss;
-
- sock=socket(PF_INET,SOCK_DGRAM,0);
- if(sock==INVALID_SOCKET)
- {
- SocketError("socket error",WSAGetLastError());
- return(1);
- }
-
- // select() to check status before sending another
-
- /*
- ia=connect(sock,(LPSOCKADDR)&sin,sizeof(sin));
- if(ia)
- {
- SocketError("connect error",WSAGetLastError());
- }
-
- ia=recv(sock,gstring,20,0);
- */
- ia=recvfrom(sock,gstring,20,0,&s,&ss);
- if(ia==SOCKET_ERROR)
- {
- SocketError("recv error",WSAGetLastError());
- }
- else
- {
- MessageBox(NULL,gstring,"SUCCESS",MB_OK);
- }
-
- closesocket(sock);
-
- }
-
- void CloseWinsock ( void )
- {
- WSACleanup();
- }
- ---- cut ----
- ---- cut ----
-
- #include <windows.h>
- #include <winsock.h>
-
-
- void SocketError ( char *s,int e )
- {
- char hello[80];
- switch(e)
- {
- case WSAEINTR: MessageBox(NULL,"WSAEINTR",s,MB_OK); break;
- case WSAEBADF: MessageBox(NULL,"WSAEBADF",s,MB_OK); break;
- case WSAEACCES: MessageBox(NULL,"WSAEACCESS",s,MB_OK); break;
- case WSAEFAULT: MessageBox(NULL,"WSAEFAULT",s,MB_OK); break;
- case WSAEINVAL: MessageBox(NULL,"WSAEINVAL",s,MB_OK); break;
- case WSAEMFILE: MessageBox(NULL,"WSAEMFILE",s,MB_OK); break;
- case WSAEWOULDBLOCK: MessageBox(NULL,"WSAEWOULDBLOCK",s,MB_OK); break;
- case WSAEINPROGRESS: MessageBox(NULL,"WSAEINPROGRESS",s,MB_OK); break;
- case WSAEALREADY: MessageBox(NULL,"WSAEALREADY",s,MB_OK); break;
- case WSAENOTSOCK: MessageBox(NULL,"WSAENOTSOCK",s,MB_OK); break;
- case WSAEDESTADDRREQ: MessageBox(NULL,"WSAEDESTADDRREQ",s,MB_OK); break;
- case WSAEMSGSIZE: MessageBox(NULL,"WSAEMSGSIZE",s,MB_OK); break;
- case WSAEPROTOTYPE: MessageBox(NULL,"WSAEPROTOTYPE",s,MB_OK); break;
- case WSAENOPROTOOPT: MessageBox(NULL,"WSAENOPROTOOPT",s,MB_OK); break;
- case WSAEPROTONOSUPPORT: MessageBox(NULL,"WSAEPROTONOSUPPORT",s,MB_OK); break;
- case WSAESOCKTNOSUPPORT: MessageBox(NULL,"WSAESOCKTNOSUPPORT",s,MB_OK); break;
- case WSAEOPNOTSUPP: MessageBox(NULL,"WSAEOPNOTSUPP",s,MB_OK); break;
- case WSAEPFNOSUPPORT: MessageBox(NULL,"WSAEPFNOSUPPORT",s,MB_OK); break;
- case WSAEAFNOSUPPORT: MessageBox(NULL,"WSAEAFNOSUPPORT",s,MB_OK); break;
- case WSAEADDRINUSE: MessageBox(NULL,"WSAEADDRINUSE",s,MB_OK); break;
- case WSAEADDRNOTAVAIL: MessageBox(NULL,"WSAEADDRNOTAVAIL",s,MB_OK); break;
- case WSAENETDOWN: MessageBox(NULL,"WSAENETDOWN",s,MB_OK); break;
- case WSAENETUNREACH: MessageBox(NULL,"WSAENETUNREACH",s,MB_OK); break;
- case WSAENETRESET: MessageBox(NULL,"WSAENETRESET",s,MB_OK); break;
- case WSAECONNABORTED: MessageBox(NULL,"WSAECONNABORTED",s,MB_OK); break;
- case WSAECONNRESET: MessageBox(NULL,"WSAECONNRESET",s,MB_OK); break;
- case WSAENOBUFS: MessageBox(NULL,"WSAENOBUFS",s,MB_OK); break;
- case WSAEISCONN: MessageBox(NULL,"WSAEISCONN",s,MB_OK); break;
- case WSAENOTCONN: MessageBox(NULL,"WSAENOTCONN",s,MB_OK); break;
- case WSAESHUTDOWN: MessageBox(NULL,"WSAESHUTDOWN",s,MB_OK); break;
- case WSAETOOMANYREFS: MessageBox(NULL,"WSAETOOMANYREFS",s,MB_OK); break;
- case WSAETIMEDOUT: MessageBox(NULL,"WSAETIMEDOUT",s,MB_OK); break;
- case WSAECONNREFUSED: MessageBox(NULL,"WSAECONNREFUSED",s,MB_OK); break;
- case WSAELOOP: MessageBox(NULL,"WSAELOOP",s,MB_OK); break;
- case WSAENAMETOOLONG: MessageBox(NULL,"WSAENAMETOOLONG",s,MB_OK); break;
- case WSAEHOSTDOWN: MessageBox(NULL,"WSAEHOSTDOWN",s,MB_OK); break;
- case WSAEHOSTUNREACH: MessageBox(NULL,"WSAEHOSTUNREACH",s,MB_OK); break;
- case WSAENOTEMPTY: MessageBox(NULL,"WSAENOTEMPTY",s,MB_OK); break;
- case WSAEPROCLIM: MessageBox(NULL,"WSAEPROCLIM",s,MB_OK); break;
- case WSAEUSERS: MessageBox(NULL,"WSAEUSERS",s,MB_OK); break;
- case WSAEDQUOT: MessageBox(NULL,"WSAEDQUIT",s,MB_OK); break;
- case WSAESTALE: MessageBox(NULL,"WSAESTALE",s,MB_OK); break;
- case WSAEREMOTE: MessageBox(NULL,"WSAEREMOTE",s,MB_OK); break;
- case WSAEDISCON: MessageBox(NULL,"WSAEDISCON",s,MB_OK); break;
- case WSASYSNOTREADY: MessageBox(NULL,"WSAESYSNOTREADY",s,MB_OK); break;
- case WSAVERNOTSUPPORTED: MessageBox(NULL,"WSAVERNOTSUPPORTED",s,MB_OK); break;
- case WSANOTINITIALISED: MessageBox(NULL,"WSANOTINITIALISED",s,MB_OK); break;
- case WSAHOST_NOT_FOUND: MessageBox(NULL,"WSAHOST_NOT_FOUND",s,MB_OK); break;
- case WSATRY_AGAIN: MessageBox(NULL,"WSATRY_AGAIN",s,MB_OK); break;
- case WSANO_RECOVERY: MessageBox(NULL,"WSANO_RECOVERY",s,MB_OK); break;
- case WSANO_DATA: MessageBox(NULL,"WSANO_DATA",s,MB_OK); break;
- default: wsprintf(hello,"Unknown error %d",e);
- MessageBox(NULL,hello,s,MB_OK); break;
- }
- }
- ---- cut ----
-
-
-